#include <iostream>
#include <thread>

void foo(int &x) {
    x = x + 1;
}

std::thread thread1;
void test() {
    int a = 1;
    thread1 = std::thread(foo, std::ref(a));
}

int main() {

    // 情况1
    // std::thread thread1(foo, 1); // 失败，因为临时变量赋值过后会被释放，所以找不到引用

    // 情况2
    // int a = 1;
    // std::thread thread1(foo, std::ref(a));  // 使用ref函数传递变量的引用类型，因为a变量不是临时变量，是在主线程中一直存在的

    // 情况3
    test();  // 这里使用临时变量a，按理说应该会报错，但是实际上还没有报错
    thread1.join();
    
    return 0;
}